package day3Method;

import java.util.Scanner;

public class Practice {

    public static void main(String[] args) {
        getAdd();
        getNumber();
    }
    //1.java中方法的重载与什么有关，如果两个方法的返回值不同其余相同，是否可以构成方法的重载

    /*重载只与方法名与参数类型相关，不构成方法重载*/

    //2.变量作为参数传递，如果在方法中变量的值被改变会不会影响原变量的值，为什么

    /*基本类型作为参数传递为值传递，即使在方法中更改方法中的参数的值，也不会对实际参数产生影响*/
    /*字符串作为参数传递，也是传输的地址，字符串由字符数组组成，长度不可变。如果在方法中改变了字符串的值，
    相当于重新创建了一个字符类型的数组，然后把新数组的地址给方法中的变量，
    然后把新数组的地址给方法中的变量，这样在主方法中和被调用的方法中两个str变量指向的地址就不再是同一个*/
    /*引用类型传递的是对象的引用地址。无论在主方法中还是被调用的方法中，变量的保存的地址是同一个地址。
      就是说，在主方法中调用方法是，实际参数将地址赋给了形参。如果在被调用的方法中更改了相关对象，回到主方法中
      有相同地址的变量指向的对象也会被更改*/

    //3.编写一个方法，接收一个整数n，输出1+2+3+...+n 的和。

    public static void getAdd(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int num = sc.nextInt();
        int sum = 0;
        for (int i = 1; i<=num; i++){
            sum += i;
        }
        System.out.println("输出的和为:"+sum);
    }

    //4.编写一个方法，接收一个整数，输出这个整数是几位数。

    public static void  getNumber(){
        System.out.println("请输入一个整数:");
        Scanner src = new Scanner(System.in);
        int num = src.nextInt();
        int count = 0;
        while(num != 0){
            count++;
            num /=10;
        }
        System.out.println("您输入的是"+count+"位数");

    }

    //5.定义三个方法，第一个方法，返回两个int值中的最大值，第二个方法，返回两个double的最大值，第三个方法，返回三个double值中的最大值。要求三个方法重载
    /*返回两个int值中的最大值 */
    public int getMax1(int a, int b) {
        return Math.max(a, b);
    }
    /*返回两个double的最大值*/
    public double getMax2(double a, double b) {
        return Math.max(a, b);
    }
    /*返回三个double值中的最大值*/
    public double getMax3(double a, double b, double c) {
        return Math.max(Math.max(a, b), c);
    }

}
